{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Working on a Windows 10\n",
"Python version 3.11.8 | packaged by conda-forge | (main, Feb 16 2024, 20:40:50) [MSC v.1937 64 bit (AMD64)]\n",
"Pandas version 2.2.3\n",
"bifacial_radiance version 0.5.0b2.dev4+gedb973d.d20250924\n"
]
}
],
"source": [
"# This information helps with debugging and getting support :)\n",
"import sys, platform\n",
"import pandas as pd\n",
"import bifacial_radiance as br\n",
"print(\"Working on a \", platform.system(), platform.release())\n",
"print(\"Python version \", sys.version)\n",
"print(\"Pandas version \", pd.__version__)\n",
"print(\"bifacial_radiance version \", br.__version__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 9 - Torquetube Shading\n",
"## Recreating JPV 2019 / PVSC 2018 Fig. 13\n",
"\n",
"\n",
"Calculating and plotting shading from torque tube on 1-axis tracking for 1 day, which is figure 13 in: \n",
"\n",
" Ayala Pelaez S, Deline C, Greenberg P, Stein JS, Kostuk RK. Model and validation of single-axis tracking with bifacial PV. IEEE J Photovoltaics. 2019;9(3):715–21. https://ieeexplore.ieee.org/document/8644027 and https://www.nlr.gov/docs/fy19osti/72039.pdf (pre-print, conference version)\n",
"\n",
"\n",
"This is what we will re-create:\n",
"\n",
"\n",
"Use bifacial_radiance minimum v. 0.3.1 or higher. Many things have been updated since this paper, simplifying the generation of this plot:\n",
"\n",
"* Sensor position is now always generated E to W on N-S tracking systems, so same sensor positions can just be added for this calculation at the end without needing to flip the sensors.\n",
"* Torquetubes get automatically generated in makeModule. Following PVSC 2018 paper, rotation is around the modules and not around the torque tube axis (which is a new feature)\n",
"* Simulating only 1 day on single-axis tracking easier with cumulativesky = False and gendaylit1axis(startdate='06/24', enddate='06/24'\n",
"* Sensors get generated very close to surface, so all results are from the module surface and not the torquetube for this 1-UP case. \n",
"\n",
"## Steps:\n",
"\n",
"1. Running the simulations for all the cases:\n",
" 1. Baseline Case: No Torque Tube \n",
" 2. Zgap = 0.1 \n",
" 3. Zgap = 0.2 \n",
" 4. Zgap = 0.3 \n",
"2. Read-back the values and tabulate average values for unshaded, 10cm gap and 30cm gap \n",
"3. Plot spatial loss values for 10cm and 30cm data \n",
"4. Overall Shading Factor (for 1 day) \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. Running the simulations for all the cases"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your simulation will be stored in C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_09\n"
]
}
],
"source": [
"import os\n",
"from pathlib import Path\n",
"\n",
"testfolder = str(Path().resolve().parent.parent / 'bifacial_radiance' / 'TEMP' / 'Tutorial_09')\n",
"if not os.path.exists(testfolder):\n",
" os.makedirs(testfolder)\n",
"\n",
"print (\"Your simulation will be stored in %s\" % testfolder)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# VARIABLES of the simulation: \n",
"lat = 35.1 # ABQ\n",
"lon = -106.7 # ABQ\n",
"x=1\n",
"y = 2 \n",
"numpanels=1\n",
"limit_angle = 45 # tracker rotation limit angle\n",
"backtrack = True\n",
"albedo = 'concrete' # ground albedo\n",
"hub_height = y*0.75 # H = 0.75 \n",
"gcr = 0.35 \n",
"pitch = y/gcr\n",
"#pitch = 1.0/gcr # Check from 1Axis_Shading_PVSC2018 file\n",
"cumulativesky = False # needed for set1axis and makeScene1axis so simulation is done hourly not with gencumsky.\n",
"limit_angle = 45 # tracker rotation limit angle\n",
"nMods=10\n",
"nRows=3\n",
"sensorsy = 200\n",
"module_type='test-module'\n",
"datewanted='06_24' # sunny day 6/24/1972 (index 4180 - 4195). Valid formats starting version 0.4.0 for full day sim: mm_dd\n",
"\n",
"## Torque tube info\n",
"tubetype='round'\n",
"material = 'Metal_Grey'\n",
"diameter = 0.1\n",
"axisofrotationTorqueTube = False # Original PVSC version rotated around the modules like most other software.\n",
"# Variables that will get defined on each iteration below:\n",
"zgap = 0 # 0.2, 0.3 values tested. Re-defined on each simulation.\n",
"visible = False # baseline is no torque tube.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.5.0b2.dev4+gedb973d.d20250924\n",
"path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_09\n",
"Making path: images\n",
"Making path: objects\n",
"Making path: results\n",
"Making path: skies\n",
"Making path: EPWs\n",
"Making path: materials\n",
"Loading albedo, 1 value(s), 0.281 avg\n",
"1 nonzero albedo values.\n",
"Getting weather file: USA_NM_Albuquerque.723650_TMY2.epw\n",
" ... OK!\n",
"8760 line in WeatherFile. Assuming this is a standard hourly WeatherFile for the year for purposes of saving Gencumulativesky temporary weather files in EPW folder.\n",
"Coercing year to 2021\n",
"Filtering dates\n",
"Saving file EPWs\\metdata_temp.csv, # points: 8760\n",
"Calculating Sun position for Metdata that is right-labeled with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n",
"Creating ~14 skyfiles. \n",
"Created 14 skyfiles in /skies/\n"
]
}
],
"source": [
"# Simulation Start.\n",
"import bifacial_radiance\n",
"import numpy as np\n",
"\n",
"print(bifacial_radiance.__version__)\n",
"\n",
"demo = bifacial_radiance.RadianceObj(path = testfolder) \n",
"demo.setGround(albedo)\n",
"epwfile = demo.getEPW(lat, lon) \n",
"metdata = demo.readWeatherFile(epwfile, starttime=datewanted, endtime=datewanted) \n",
"trackerdict = demo.set1axis(metdata, limit_angle = limit_angle, backtrack = backtrack, gcr = gcr, cumulativesky = cumulativesky)\n",
"trackerdict = demo.gendaylit1axis() \n",
"sceneDict = {'pitch':pitch,'hub_height':hub_height, 'nMods': nMods, 'nRows': nRows} "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### A. Baseline Case: No Torque Tube\n",
"\n",
"When torquetube is False, zgap is the distance from axis of torque tube to module surface, but since we are rotating from the module's axis, this Zgap doesn't matter for this baseline case."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Module Name: _NoTT\n",
"Module _NoTT updated in module.json\n",
"Module _NoTT updated in module.json\n",
"Pre-existing .rad file objects\\_NoTT.rad will be overwritten\n",
"\n",
"\n",
"Making ~14 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n",
"14 Radfiles created in /objects/\n",
"\n",
"Making 14 octfiles in root directory.\n",
"Created 1axis_2021-06-24_0600.oct\n",
"Created 1axis_2021-06-24_0700.oct\n",
"Created 1axis_2021-06-24_0800.oct\n",
"Created 1axis_2021-06-24_0900.oct\n",
"Created 1axis_2021-06-24_1000.oct\n",
"Created 1axis_2021-06-24_1100.oct\n",
"Created 1axis_2021-06-24_1200.oct\n",
"Created 1axis_2021-06-24_1300.oct\n",
"Created 1axis_2021-06-24_1400.oct\n",
"Created 1axis_2021-06-24_1500.oct\n",
"Created 1axis_2021-06-24_1600.oct\n",
"Created 1axis_2021-06-24_1700.oct\n",
"Created 1axis_2021-06-24_1800.oct\n",
"Created 1axis_2021-06-24_1900.oct\n",
"Linescan in process: 1axis_2021-06-24_0600_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0600_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0600_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0600. Wm2Front: 160.61333133333335. Wm2Back: 17.108433666666667\n",
"Linescan in process: 1axis_2021-06-24_0700_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0700_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0700_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0700. Wm2Front: 711.8865435. Wm2Back: 15.716010416666666\n",
"Linescan in process: 1axis_2021-06-24_0800_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0800_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0800_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0800. Wm2Front: 924.6059534999999. Wm2Back: 69.45826663333334\n",
"Linescan in process: 1axis_2021-06-24_0900_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0900_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0900_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0900. Wm2Front: 1038.910115. Wm2Back: 84.86849265000001\n",
"Linescan in process: 1axis_2021-06-24_1000_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1000_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1000_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1000. Wm2Front: 1077.66266. Wm2Back: 107.6461374\n",
"Linescan in process: 1axis_2021-06-24_1100_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1100_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1100_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1100. Wm2Front: 1083.7125216666666. Wm2Back: 133.4556714\n",
"Linescan in process: 1axis_2021-06-24_1200_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1200_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1200_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1200. Wm2Front: 1085.3191166666668. Wm2Back: 150.71347516666665\n",
"Linescan in process: 1axis_2021-06-24_1300_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1300_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1300_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1300. Wm2Front: 1083.4486733333335. Wm2Back: 152.49291916666667\n",
"Linescan in process: 1axis_2021-06-24_1400_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1400_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1400_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1400. Wm2Front: 1090.0625216666667. Wm2Back: 139.56060100000002\n",
"Linescan in process: 1axis_2021-06-24_1500_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1500_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1500_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1500. Wm2Front: 1089.5583033333335. Wm2Back: 115.80682831666665\n",
"Linescan in process: 1axis_2021-06-24_1600_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1600_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1600_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1600. Wm2Front: 1063.31393. Wm2Back: 88.37872263333333\n",
"Linescan in process: 1axis_2021-06-24_1700_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1700_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1700_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1700. Wm2Front: 973.9297876666667. Wm2Back: 74.25426416666667\n",
"Linescan in process: 1axis_2021-06-24_1800_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1800_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1800_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1800. Wm2Front: 795.2664161666667. Wm2Back: 29.030996633333334\n",
"Linescan in process: 1axis_2021-06-24_1900_NoTT_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1900_NoTT_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1900_NoTT_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1900. Wm2Front: 309.2898725. Wm2Back: 17.900574133333336\n"
]
}
],
"source": [
"#CASE 0 No torque tube\n",
"# When torquetube is False, zgap is the distance from axis of torque tube to module surface, but since we are rotating from the module's axis, this Zgap doesn't matter.\n",
"# zgap = 0.1 + diameter/2.0 \n",
"torquetube = False \n",
"customname = '_NoTT'\n",
"module_NoTT = demo.makeModule(name=customname,x=x,y=y, numpanels=numpanels)\n",
"module_NoTT.addTorquetube(visible=False, axisofrotation=False, diameter=0)\n",
"trackerdict = demo.makeScene1axis(trackerdict, module_NoTT, sceneDict, cumulativesky = cumulativesky) \n",
"trackerdict = demo.makeOct1axis(trackerdict)\n",
"trackerdict = demo.analysis1axis(trackerdict, sensorsy = sensorsy, customname = customname)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### B. ZGAP = 0.1"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Module Name: _zgap0.1\n",
"Module _zgap0.1 updated in module.json\n",
"\n",
"Making ~14 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n",
"14 Radfiles created in /objects/\n",
"\n",
"Making 14 octfiles in root directory.\n",
"Created 1axis_2021-06-24_0600.oct\n",
"Created 1axis_2021-06-24_0700.oct\n",
"Created 1axis_2021-06-24_0800.oct\n",
"Created 1axis_2021-06-24_0900.oct\n",
"Created 1axis_2021-06-24_1000.oct\n",
"Created 1axis_2021-06-24_1100.oct\n",
"Created 1axis_2021-06-24_1200.oct\n",
"Created 1axis_2021-06-24_1300.oct\n",
"Created 1axis_2021-06-24_1400.oct\n",
"Created 1axis_2021-06-24_1500.oct\n",
"Created 1axis_2021-06-24_1600.oct\n",
"Created 1axis_2021-06-24_1700.oct\n",
"Created 1axis_2021-06-24_1800.oct\n",
"Created 1axis_2021-06-24_1900.oct\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0600_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0600. Wm2Front: 160.79456283333332. Wm2Back: 16.149412396666666\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0700_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0700. Wm2Front: 714.142931. Wm2Back: 16.990744218333333\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0800_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0800. Wm2Front: 927.6359336666667. Wm2Back: 67.13198245\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0900_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0900. Wm2Front: 1039.9753983333333. Wm2Back: 95.34997313333334\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1000_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1000. Wm2Front: 1077.69022. Wm2Back: 114.38867850000001\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1100_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1100. Wm2Front: 1084.0945733333333. Wm2Back: 129.43752946666666\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1200_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1200. Wm2Front: 1085.3231933333334. Wm2Back: 132.16437158333335\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1300_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1300. Wm2Front: 1083.5638116666669. Wm2Back: 130.74440076666667\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1400_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1400. Wm2Front: 1090.2652516666667. Wm2Back: 132.6973246833333\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1500_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1500. Wm2Front: 1089.9819400000001. Wm2Back: 120.36316593333333\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1600_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1600. Wm2Front: 1064.56622. Wm2Back: 99.018636\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1700_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1700. Wm2Front: 977.1144816666667. Wm2Back: 79.30465405\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1800_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1800. Wm2Front: 797.9707716666666. Wm2Back: 25.663987683333335\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.1_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.1_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1900_zgap0.1_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1900. Wm2Front: 309.3469401666667. Wm2Back: 16.957719663333332\n"
]
}
],
"source": [
"#ZGAP 0.1 \n",
"zgap = 0.1\n",
"customname = '_zgap0.1'\n",
"tubeParams = {'tubetype':tubetype,\n",
" 'diameter':diameter,\n",
" 'material':material,\n",
" 'axisofrotation':False,\n",
" 'visible':True} # either pass this into makeModule, or separately into module.addTorquetube()\n",
"module_zgap01 = demo.makeModule(name=customname, x=x,y=y, numpanels=numpanels, zgap=zgap, tubeParams=tubeParams)\n",
"trackerdict = demo.makeScene1axis(trackerdict, module_zgap01, sceneDict, cumulativesky = cumulativesky) \n",
"trackerdict = demo.makeOct1axis(trackerdict)\n",
"trackerdict = demo.analysis1axis(trackerdict, sensorsy = sensorsy, customname = customname)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### C. ZGAP = 0.2"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Module Name: _zgap0.2\n",
"Module _zgap0.2 updated in module.json\n",
"\n",
"Making ~14 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n",
"14 Radfiles created in /objects/\n",
"\n",
"Making 14 octfiles in root directory.\n",
"Created 1axis_2021-06-24_0600.oct\n",
"Created 1axis_2021-06-24_0700.oct\n",
"Created 1axis_2021-06-24_0800.oct\n",
"Created 1axis_2021-06-24_0900.oct\n",
"Created 1axis_2021-06-24_1000.oct\n",
"Created 1axis_2021-06-24_1100.oct\n",
"Created 1axis_2021-06-24_1200.oct\n",
"Created 1axis_2021-06-24_1300.oct\n",
"Created 1axis_2021-06-24_1400.oct\n",
"Created 1axis_2021-06-24_1500.oct\n",
"Created 1axis_2021-06-24_1600.oct\n",
"Created 1axis_2021-06-24_1700.oct\n",
"Created 1axis_2021-06-24_1800.oct\n",
"Created 1axis_2021-06-24_1900.oct\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0600_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0600. Wm2Front: 160.69127733333335. Wm2Back: 16.13198465\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0700_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0700. Wm2Front: 714.0970468333333. Wm2Back: 17.00923173333333\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0800_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0800. Wm2Front: 927.6200985. Wm2Back: 67.34797225\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0900_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0900. Wm2Front: 1039.569765. Wm2Back: 96.1848546\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1000_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1000. Wm2Front: 1077.65024. Wm2Back: 115.02018179999999\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1100_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1100. Wm2Front: 1083.6396583333333. Wm2Back: 130.65506715\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1200_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1200. Wm2Front: 1085.16057. Wm2Back: 132.77163008333332\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1300_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1300. Wm2Front: 1083.6495366666666. Wm2Back: 131.3902534\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1400_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1400. Wm2Front: 1089.5272816666666. Wm2Back: 134.13126923333334\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1500_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1500. Wm2Front: 1089.5370016666666. Wm2Back: 122.10894130000001\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1600_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1600. Wm2Front: 1064.522875. Wm2Back: 100.99782898333335\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1700_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1700. Wm2Front: 977.2259275000001. Wm2Back: 80.06400821666666\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1800_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1800. Wm2Front: 797.9606495. Wm2Back: 25.91583303333333\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.2_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.2_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1900_zgap0.2_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1900. Wm2Front: 309.21895966666665. Wm2Back: 17.228730433333336\n"
]
}
],
"source": [
"#ZGAP 0.2\n",
"zgap = 0.2\n",
"customname = '_zgap0.2'\n",
"tubeParams = {'tubetype':tubetype,\n",
" 'diameter':diameter,\n",
" 'material':material,\n",
" 'axisofrotation':False,\n",
" 'visible':True} # either pass this into makeModule, or separately into module.addTorquetube()\n",
"module_zgap02 = demo.makeModule(name=customname, x=x,y=y, numpanels=numpanels,zgap=zgap, tubeParams=tubeParams)\n",
"trackerdict = demo.makeScene1axis(trackerdict, module_zgap02, sceneDict, cumulativesky = cumulativesky) \n",
"trackerdict = demo.makeOct1axis(trackerdict)\n",
"trackerdict = demo.analysis1axis(trackerdict, sensorsy = sensorsy, customname = customname)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### D. ZGAP = 0.3"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Module Name: _zgap0.3\n",
"Module _zgap0.3 updated in module.json\n",
"\n",
"Making ~14 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n",
"14 Radfiles created in /objects/\n",
"\n",
"Making 14 octfiles in root directory.\n",
"Created 1axis_2021-06-24_0600.oct\n",
"Created 1axis_2021-06-24_0700.oct\n",
"Created 1axis_2021-06-24_0800.oct\n",
"Created 1axis_2021-06-24_0900.oct\n",
"Created 1axis_2021-06-24_1000.oct\n",
"Created 1axis_2021-06-24_1100.oct\n",
"Created 1axis_2021-06-24_1200.oct\n",
"Created 1axis_2021-06-24_1300.oct\n",
"Created 1axis_2021-06-24_1400.oct\n",
"Created 1axis_2021-06-24_1500.oct\n",
"Created 1axis_2021-06-24_1600.oct\n",
"Created 1axis_2021-06-24_1700.oct\n",
"Created 1axis_2021-06-24_1800.oct\n",
"Created 1axis_2021-06-24_1900.oct\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0600_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0600_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0600. Wm2Front: 160.6142815. Wm2Back: 16.04715678333333\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0700_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0700_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0700. Wm2Front: 713.9713545. Wm2Back: 17.162669100000002\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0800_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0800_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0800. Wm2Front: 927.5181026666667. Wm2Back: 66.89136905\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_0900_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_0900_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_0900. Wm2Front: 1039.88624. Wm2Back: 96.3735126\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1000_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1000_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1000. Wm2Front: 1077.8121083333333. Wm2Back: 115.48856386666667\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1100_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1100_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1100. Wm2Front: 1083.3721716666666. Wm2Back: 131.75425473333334\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1200_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1200_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1200. Wm2Front: 1085.2130849999999. Wm2Back: 135.79956271666666\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1300_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1300_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1300. Wm2Front: 1084.0047533333332. Wm2Back: 133.21333536666668\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1400_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1400_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1400. Wm2Front: 1089.2621783333334. Wm2Back: 135.17987356666669\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1500_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1500_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1500. Wm2Front: 1090.0221333333332. Wm2Back: 122.11487441666667\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1600_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1600_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1600. Wm2Front: 1064.680476666667. Wm2Back: 100.8071343\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1700_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1700_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1700. Wm2Front: 977.4757143333333. Wm2Back: 80.27294976666668\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1800_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1800_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1800. Wm2Front: 797.9280076666666. Wm2Back: 26.184755483333333\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.3_Scene0_Row2_Module5_Front\n",
"Linescan in process: 1axis_2021-06-24_1900_zgap0.3_Scene0_Row2_Module5_Back\n",
"Saved: results\\irr_1axis_2021-06-24_1900_zgap0.3_Scene0_Row2_Module5.csv\n",
"Index: 2021-06-24_1900. Wm2Front: 309.27536466666663. Wm2Back: 17.48443143333333\n"
]
}
],
"source": [
"#ZGAP 0.3\n",
"zgap = 0.3\n",
"customname = '_zgap0.3'\n",
"tubeParams = {'tubetype':tubetype,\n",
" 'diameter':diameter,\n",
" 'material':material,\n",
" 'axisofrotation':False,\n",
" 'visible':True} # either pass this into makeModule, or separately into module.addTorquetube()\n",
"module_zgap03 = demo.makeModule(name=customname,x=x,y=y, numpanels=numpanels, zgap=zgap, tubeParams=tubeParams)\n",
"trackerdict = demo.makeScene1axis(trackerdict, module_zgap03, sceneDict, cumulativesky = cumulativesky) \n",
"trackerdict = demo.makeOct1axis(trackerdict)\n",
"trackerdict = demo.analysis1axis(trackerdict, sensorsy = sensorsy, customname = customname)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Read-back the values and tabulate average values for unshaded, 10cm gap and 30cm gap\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_09\\results\n"
]
}
],
"source": [
"import glob\n",
"import pandas as pd\n",
"\n",
"resultsfolder = os.path.join(testfolder, 'results')\n",
"print (resultsfolder)\n",
"filenames = glob.glob(os.path.join(resultsfolder,'*.csv'))\n",
"noTTlist = [k for k in filenames if 'NoTT' in k]\n",
"zgap10cmlist = [k for k in filenames if 'zgap0.1' in k]\n",
"zgap20cmlist = [k for k in filenames if 'zgap0.2' in k]\n",
"zgap30cmlist = [k for k in filenames if 'zgap0.3' in k]\n",
"\n",
"# sum across all hours for each case\n",
"unsh_front = np.array([pd.read_csv(f, engine='python')['Wm2Front'] for f in noTTlist]).sum(axis = 0)\n",
"cm10_front = np.array([pd.read_csv(f, engine='python')['Wm2Front'] for f in zgap10cmlist]).sum(axis = 0)\n",
"cm20_front = np.array([pd.read_csv(f, engine='python')['Wm2Front'] for f in zgap20cmlist]).sum(axis = 0)\n",
"cm30_front = np.array([pd.read_csv(f, engine='python')['Wm2Front'] for f in zgap30cmlist]).sum(axis = 0)\n",
"unsh_back = np.array([pd.read_csv(f, engine='python')['Wm2Back'] for f in noTTlist]).sum(axis = 0)\n",
"cm10_back = np.array([pd.read_csv(f, engine='python')['Wm2Back'] for f in zgap10cmlist]).sum(axis = 0)\n",
"cm20_back = np.array([pd.read_csv(f, engine='python')['Wm2Back'] for f in zgap20cmlist]).sum(axis = 0)\n",
"cm30_back = np.array([pd.read_csv(f, engine='python')['Wm2Back'] for f in zgap30cmlist]).sum(axis = 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. plot spatial loss values for 10cm and 30cm data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"#plt.rcParams['font.family'] = 'sans-serif'\n",
"#plt.rcParams['font.sans-serif'] = ['Arial']\n",
"plt.rcParams['axes.linewidth'] = 0.2 #set the value globally\n",
"\n",
"fig = plt.figure()\n",
"fig.set_size_inches(4, 2.5)\n",
"ax = fig.add_axes((0.15,0.15,0.78,0.75))\n",
"#plt.rc('font', family='sans-serif')\n",
"plt.rc('xtick',labelsize=8)\n",
"plt.rc('ytick',labelsize=8)\n",
"plt.rc('axes',labelsize=8)\n",
"plt.plot(np.linspace(-1,1,unsh_back.__len__()),(cm30_back - unsh_back)/unsh_back*100, label = '30cm gap',color = 'black') #steelblue\n",
"plt.plot(np.linspace(-1,1,unsh_back.__len__()),(cm20_back - unsh_back)/unsh_back*100, label = '20cm gap',color = 'steelblue', linestyle = '--') #steelblue\n",
"plt.plot(np.linspace(-1,1,unsh_back.__len__()),(cm10_back - unsh_back)/unsh_back*100, label = '10cm gap',color = 'darkorange') #steelblue\n",
"#plt.ylabel('$G_{rear}$ vs unshaded [Wm-2]')#(r'$BG_E$ [%]')\n",
"plt.ylabel('$G_{rear}$ / $G_{rear,tubeless}$ -1 [%]')\n",
"plt.xlabel('Module X position [m]')\n",
"plt.legend(fontsize = 8,frameon = False,loc='best')\n",
"#plt.ylim([0, 15])\n",
"plt.title('Torque tube shading loss',fontsize=9)\n",
"#plt.annotate('South',xy=(-10,9.5),fontsize = 8); plt.annotate('North',xy=(8,9.5),fontsize = 8)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Overall Shading Loss Factor\n",
"\n",
"To calculate shading loss factor, we can use the following equation:\n",
"\n",
"\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.13514724136018952\n"
]
}
],
"source": [
"ShadingFactor = (1 - cm30_back.sum() / unsh_back.sum())*100\n",
"print(ShadingFactor)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}